v-if的使用在Vue.js2的時還有一些需要注意的地方,因為Vue.js追求提高網頁的效率,所以在data有綁定的情況下預設會重複使用已經存在在data裡面的元素,如果有需要重複利用資料時當然非常方便也有助於提高效率,但如果在同時需要user在同一個template填入兩個輸入框並利用以下程式時,就會產生問題。
<template v-if="loginType === 'username'">
<label>Username</label>
<input placeholder="Enter your username">
</template>
<template v-else>
<label>Email</label>
<input placeholder="Enter your email address">
</template>
這樣在實際操作時,雖然是不同的輸入框但內容會在data中被反覆利用,沒辦法做到分開輸入,這時候我們就可以在input中加入key來避免這個問題,像這樣<input placeholder="Enter your username" key="username">
。
這個問題在Vue.js3裡面已經被修正,不必在input中加上key,而如果是在Vue2中使用這種DOM狀態頻繁更動的可以選擇使用v-show讓它不會產生元素被重複渲染的問題,而v-if的使用更適合不變的條件判斷例如登入操作等。